<?php

namespace app\admin\controller;

use think\facade\Env;
use think\Request;
use app\admin\model\Admin as AdminModel;
use app\admin\model\AuthGroup as AuthGroupModel;
use my\Auth;
use my\Redis;

class Admin extends Base
{

    private $admin;
    private $authGroupModel;

    function initialize()
    {
        parent::initialize();
        $this->admin = new AdminModel();
        $this->authGroupModel = new AuthGroupModel();
    }

    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        // 所有管理员
        $admins = AdminModel::where('is_del', 0)->paginate(2);

        // 获取所有用户组
        $groups = $this->authGroupModel->groupTree();

        // 所属用户组
        $auth = new Auth();
        foreach ($admins as $key => $value) {
            $temp = $auth->getGroups($value['id']);
            $value['groupTitle'] = $temp[0]['title'];
        }

        $this->assign('groups', $groups);
        $this->assign('admins', $admins);

        return view();
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        // 1、接收数据
        $param = input('post.');

        // 2、拼接数据
        $insert = [
            'name' => $param['name'],
            'status' => $param['status'],
            'group_id' => $param['group_id'],
        ];

        // 3、验证数据
        // todo
        if (!empty($param['pwd'])) {
            $insert['pwd'] = md5($param['pwd']);
        }

        // 4、判断是否上传了头像
        if ($_FILES['icon']['tmp_name']) { // 如果上传了头像

            $file = request()->file('icon');
            $info = $file->move(Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'static' . DIRECTORY_SEPARATOR . 'uploads');
            if ($info) {
                // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
                $insert['icon'] = DIRECTORY_SEPARATOR . 'static' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $info->getSaveName();
            } else {
                // 上传失败获取错误信息
                return $this->error($file->getError());
            }
        }

        // 5、新增用户
        $result = $this->admin->save($insert);
        if ($result) {
            db('auth_group_access')->insert(['uid' => $this->admin->id, 'group_id' => $insert['group_id']]);
            return redirect('/admin');
        }
        $this->error('新增管理员失败!');

    }

    /**
     * 显示指定的资源
     *
     * @param  int $id
     * @return \think\Response
     */
    public function read($id)
    {
        // 需要查看的管理员的信息
        $admin = AdminModel::get($id);
        $auth = new Auth();
        $group = $auth->getGroups($id);

        $admin['groupTitle'] = $group[0]['title'];
        return $admin;

    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int $id
     * @return \think\Response
     */
    public function edit($id)
    {
        // 需要修改的管理员的信息
        $admin = AdminModel::get($id);
        $admin['group_id'] = db('auth_group_access')
            ->where('uid', $admin['id'])
            ->value('group_id');

        return $admin;
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request $request
     * @param  int $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        // 1、接收数据
        $updateAdmin = input('put.');

        // 2、验证数据
        // todo

        // 3、拼接参数
        $param = [
            'name' => $updateAdmin['name'],
            'status' => $updateAdmin['status'],
        ];

        if (!empty($param['pwd'])) {
            $insert['pwd'] = md5($param['pwd']);
        }

        // 4、判断是否上传了头像
        if ($_FILES['icon']['tmp_name']) { // 如果上传了头像

            $file = request()->file('icon');
            $info = $file->move(Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'static' . DIRECTORY_SEPARATOR . 'uploads');
            if ($info) {
                // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
                $param['icon'] = DIRECTORY_SEPARATOR . 'static' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $info->getSaveName();
            } else {
                // 上传失败获取错误信息
                return $this->error($file->getError());
            }
        }

        // 5、更新数据
        $result = AdminModel::where('id', $id)->update($param);
        if ($result !== false) {
            db('auth_group_access')->where('uid', $id)->update(['group_id' => $updateAdmin['group_id']]);
            return redirect('/admin');
        }
        $this->error('更新失败!');
    }

    /**
     * 删除指定资源
     *
     * @param  int $id
     * @return \think\Response
     */
    public function delete($id)
    {
        $result = AdminModel::where('id', $id)->update(['is_del' => 1]);
        if ($result !== false) {
            db('auth_group_access')->where('uid', $id)->delete();
            return 1;
        }
        return 0;
    }

    /**
     * 切换用户状态
     */
    public function switchStatus($id)
    {
        $result = $this->admin->switchStatus($id);
        return $result;
    }

    /**
     * 退出登录
     */
    public function logout()
    {
        $key = 'uid_' . cookie('op_admin_uid') . '_key';

        // 删除redis中的token
        $redis = new Redis();
        $redis::del($key);

        // 删除session
        session('uid_' . cookie('op_admin_uid'), null);

        $this->success('退出登录成功!', '/login');

    }

    /**
     * 无权访问
     * @return \think\response\View
     */
    public function noauthorized() {
        return view();
    }

}
